package com.dingding.manager.modules.system.dao.impl;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.dingding.manager.common.beans.SysProvince;
import com.dingding.manager.common.dao.Db;
import com.dingding.manager.modules.dirver.sql.DriverSql;
import com.dingding.manager.modules.system.dao.ProvinceAndCityDao;
import com.dingding.manager.modules.system.dto.proandcity.CityDTO;
import com.dingding.manager.modules.system.dto.proandcity.ProIdAndCityIdDTO;
import com.dingding.manager.modules.system.sql.ProAndCitySQL;

/**
 * 
 * @Description: 省份和城市级联查询Dao实现
 * @author haoxiaojun
 * @date 2016年12月3日 下午1:56:59
 * @since V2.5.7
 */
@Component("provinceAndCityDao")
public class ProvinceAndCityDaoImpl implements ProvinceAndCityDao {

	private Logger log = Logger.getLogger(this.getClass());

	/**
	 * 
	 * @Description: 获取所有省份信息
	 * @author haoxiaojun
	 * @date 2016年12月3日 下午1:57:27
	 * @since V2.5.7
	 */
	@Transactional(readOnly = true)
	public List<SysProvince> getProvince() {

		List<SysProvince> proviceList = Db.queryAll(SysProvince.class);
		return proviceList;

	}

	/**
	 * 
	 * @Description: 根据省份Id获取当前省份下的所有城市
	 * @author haoxiaojun
	 * @date 2016年12月3日 下午1:57:40
	 * @since V2.5.7
	 */
	@Transactional(propagation = Propagation.REQUIRED)
	public List<CityDTO> getCity(List<Integer> parms, String sql) {

		List<CityDTO> cityList = Db.querySqlList(CityDTO.class, sql, parms.toArray());
		return cityList;

	}

	/**
	 * 
	 * @Title: getSysProvinceById @Description: 根据省份id查询省份信息 @param 参数说明 @author
	 * hufan @return 返回类型 @throws
	 */
	@Override
	@Transactional(readOnly = true)
	public SysProvince getSysProvinceById(Integer provinceId) {

		if (provinceId == null) {
			return null;
		}

		return Db.findById(provinceId, SysProvince.class);
	}

	/**
	 * 
	 * @Description: 通过当前登录的用户Id来给出相对应的开放权限省份
	 * @author haoxiaojun
	 * @date 2016年12月12日 下午5:26:58
	 * @since V 2.5.7
	 */
	@Override
	@Transactional(readOnly = true)
	public List<SysProvince> getProvinceByUserId(Integer userid) {

		if (userid == null) {
			return null;
		}

		String sql = ProAndCitySQL.GET_PRO_BY_USER_ID;
		return Db.querySqlList(SysProvince.class, sql, userid);
	}

	@Override
	@Transactional(readOnly = true)
	public ProIdAndCityIdDTO getProIdAndCityIdByCompanyId(Integer companyId) {
		if (companyId == null) {
			return null;
		}

		String sql = ProAndCitySQL.GET_PRO_CITY_BY_COMPANY_ID;

		ProIdAndCityIdDTO result = Db.querySqlFirst(ProIdAndCityIdDTO.class, sql, companyId);
		return result;
	}

}
